package com.github.simonpercic.oklog;
import com.github.simonpercic.oklog.core.LogManager;
import com.github.simonpercic.oklog.core.BaseLogDataInterceptorUnitTest;
import com.squareup.okhttp.HttpUrl;
import com.squareup.okhttp.MediaType;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.RequestBody;
import com.squareup.okhttp.Response;
import com.squareup.okhttp.mockwebserver.MockResponse;
import com.squareup.okhttp.mockwebserver.MockWebServer;
import org.junit.Rule;
import org.junit.runner.RunWith;
import org.mockito.runners.MockitoJUnitRunner;
import java.io.IOException;
import java.util.Locale;
import okio.Buffer;
/**
* LogDataInterceptor unit test. Inspired by: https://github.com/square/okhttp/tree/master/okhttp-logging-interceptor.
*
* @author Simon Percic <a href="https://github.com/simonpercic">https://github.com/simonpercic</a>
*/
@RunWith(MockitoJUnitRunner.class)
public class LogDataInterceptorUnitTest extends BaseLogDataInterceptorUnitTest<MockResponse, Request> {
private static final MediaType PLAIN = MediaType.parse(PLAIN_STRING);
@Rule public final MockWebServer server = new MockWebServer();
private OkHttpClient client;
private HttpUrl url;
@Override protected String createClient(LogManager applicationLogManager, LogManager networkLogManager) {
OkLogInterceptor applicationInterceptor = new OkLogInterceptor(applicationLogManager);
OkLogInterceptor networkInterceptor = new OkLogInterceptor(networkLogManager);
client = new OkHttpClient();
client.networkInterceptors().add(networkInterceptor);
client.interceptors().add(applicationInterceptor);
client.setConnectionPool(null);
url = server.url("/");
return String.format(Locale.US, "%s:%d", server.getHostName(), server.getPort());
}
@Override protected void newCall(MockResponse mockResponse) throws IOException {
newCall(request().build(), mockResponse);
}
@Override protected void newCall(Request request, MockResponse mockResponse) throws IOException {
server.enqueue(mockResponse);
Response response = client.newCall(request).execute();
response.body().close();
}
@Override protected String getUrlString() {
return url.toString();
}
@Override protected String getUrlPath() {
return url.encodedPath();
}
@Override protected MockResponse createMockResponse() {
return new MockResponse();
}
@Override protected MockResponse setMockResponseStatus(MockResponse mockResponse, String status) {
return mockResponse.setStatus(status);
}
@Override protected MockResponse setMockResponseBody(MockResponse mockResponse, String body) {
return mockResponse.setBody(body);
}
@Override protected MockResponse setMockResponseBody(MockResponse mockResponse, Buffer body) {
return mockResponse.setBody(body);
}
@Override protected MockResponse setMockResponsePlainContentTypeHeader(MockResponse mockResponse) {
return mockResponse.setHeader(CONTENT_TYPE, PLAIN);
}
@Override protected MockResponse setMockResponseHeader(MockResponse mockResponse, String name, Object value) {
return mockResponse.setHeader(name, value);
}
@Override protected MockResponse setMockResponseChunked(MockResponse mockResponse, String body, int maxChunkSize) {
return mockResponse.setChunkedBody(body, maxChunkSize);
}
@Override protected Request createPlainPostRequest(String body) {
return request().post(RequestBody.create(PLAIN, body)).build();
}
private Request.Builder request() {
return new Request.Builder().url(url);
}
}